package edualuc.game.JogoGalinhaDroid;
import java.util.ArrayList;


public class Partida {
	private double tempo;
	private Jogador jogador;
	private Cenario cenario;
	private final int tempoInicial = 60;
	public final int quadroPorSegundo = 30;
	
	public Partida() {
		setCenario(new Cenario());
		setTempo(tempoInicial);
		setJogador(new Jogador());
	}
	public void atualizaTudo(){
		moveGalinhas();
		moveVeiculos();
		verificaSeAtropelouGalinhas();
		atualizaTempo();
	}
	private void moveGalinhas(){
		Galinha galinha;
		int quantidadeGalinhas = getCenario().getGalinhas().size();
				
		for (int indiceDaGalinha = 0; indiceDaGalinha < quantidadeGalinhas; indiceDaGalinha++) {
			galinha = getCenario().getGalinha(indiceDaGalinha);
			moveGalinhaSePuder(galinha);
		}
		
	}
	private void moveGalinhaSePuder(Galinha galinha) {
		if (getCenario().galinhaNaoTemObstaculos(galinha) && getCenario().naoEstaNaBordas(galinha)) {
			galinha.mover();
		} else {
			galinha.inverterDirecao();
			galinha.mover();
		} 
	}
	private void moveVeiculos() {
		int quantidadeVeiculos = getCenario().getVeiculos().size();
		
		for (int indiceDoVeiculo = 0; indiceDoVeiculo < quantidadeVeiculos; indiceDoVeiculo++) {
			if (getCenario().naoEstaNaBordas(getCenario().getVeiculo(indiceDoVeiculo))) {
				getCenario().getVeiculo(indiceDoVeiculo).mover();
			}
		}
	}
	private void verificaSeAtropelouGalinhas() {
		ArrayList<Veiculo> veiculos = getCenario().getVeiculos();
		ArrayList<Galinha> galinhas = getCenario().getGalinhas();
		double distancia;
		float pontuacaoDaGalinha;
		
		for (int indiceDoVeiculo = 0; indiceDoVeiculo < veiculos.size(); indiceDoVeiculo++) {
			
			for (int indiceDaGalinha = 0; indiceDaGalinha < galinhas.size(); indiceDaGalinha++) {
				
				distancia = getCenario().calcularDistanciaEntrePersonagens(getCenario().getVeiculo(indiceDoVeiculo), getCenario().getGalinha(indiceDaGalinha));
				if (distancia < getCenario().distanciaMinimaEntrePersonagens) {
					pontuacaoDaGalinha = getCenario().atropelarGalinha(getCenario().getGalinha(indiceDaGalinha));
					getJogador().somarPontos(pontuacaoDaGalinha);
					getCenario().criarGalinhaAleatoria();
					indiceDaGalinha--; // Se atropelou uma galinha volta o ArrayList reorganiza os indices 
				}
			}
		}
	}
	
	private void atualizaTempo(){
		double milisegundos = (double) (1.0 / quadroPorSegundo);
		setTempo(getTempo() - milisegundos);
	}
	public boolean acabouTempo() {
		return (getTempo() <= 0)? true : false;
	}
	
	public double getTempo() {
		return this.tempo;
	}
	public Cenario getCenario() {
		return cenario;
	}
	public Jogador getJogador() {
		return jogador;
	}
	public void setCenario(Cenario cenario) {
		this.cenario = cenario;
	}
	private void setTempo(double novo_tempo) {
		this.tempo = novo_tempo;
	}
	public void setJogador(Jogador jogador) {
		this.jogador = jogador;
	}
	public void veiculoDobrarParaCima(int indiceDoVeiculo) {
		getCenario().getVeiculo(indiceDoVeiculo).dobrarParaCima();
	}
	public void veiculoDobrarParaBaixo(int indiceDoVeiculo) {
		getCenario().getVeiculo(indiceDoVeiculo).dobrarParaBaixo();
	}
	public void veiculoDobrarParaEsquerda(int indiceDoVeiculo) {
		getCenario().getVeiculo(indiceDoVeiculo).dobrarParaEsquerda();
	}
	public void veiculoDobrarParaDireita(int indiceDoVeiculo) {
		getCenario().getVeiculo(indiceDoVeiculo).dobrarParaDireita();
	}
}
